Messaging and queuing systems are often used to support the passing of messages between different applications, or from one portion of an application to another. These systems usually include the ability to pass messages between different computers on a network, or between a computer and a networked resource, such as a networked database system. They also usually include the ability to support “reliable messaging”. Reliable messages are those that are stored persistently when they are sent, such that they continue to exist in the event of a resource failure, for example if the queuing system shuts-down or if there is a network communication failure or a computer failure. When reliable messaging is employed, once the failed resource is available again, the message is recovered from disk and is made available to the intended recipient.
Common reliable messaging systems in use today include those developed in accordance with the Java 2 Enterprise Edition (J2EE), which provides a set of specifications that enable the development of multi-tier enterprise applications. Within the J2EE framework, the Java Messaging Server (JMS) Application Program Interface (API) is used to describe asynchronous communication between the applications. JMS messages are typically asynchronous requests, reports, or events that are passed between enterprise applications. Through the exchange of these messages, each application communicates with other applications and resources, and tracks the progress of the enterprise. JMS thus specifies one common API for enterprise messaging. Other messaging servers and specifications include Tuxedo/Q, MessageQ, IBM's MQSeries, Talco's Rendezvous product, and Progress' Sonic MQ.
One of the problems with current messaging systems is that they lack an efficient way to plug in or otherwise adapt to new persistence resources. This hinders performance and scalability. What is needed is a system that allows for easy expansion to accommodate new resources and resource types, while maintaining a consistent interface for the messaging server, and without placing undue burden on the system.